// @File  : ali.go
// @Author: JunLong.Liao&此处不应有BUG!
// @Date  : 2021/12/16
// @slogan: 又是不想写代码的一天，神兽保佑，代码无BUG！
//         ┏┓      ┏┓
//        ┏┛┻━━━━━━┛┻┓
//        ┃     ღ    ┃
//        ┃  ┳┛   ┗┳ ┃
//        ┃     ┻    ┃
//        ┗━┓      ┏━┛
//          ┃      ┗━━━┓
//          ┃ 神兽咆哮!  ┣┓
//          ┃         ┏┛
//          ┗┓┓┏━━━┳┓┏┛
//           ┃┫┫   ┃┫┫
//           ┗┻┛   ┗┻┛

package CloudStorage

import (
	"fmt"
	"github.com/aliyun/aliyun-oss-go-sdk/oss"
	"mime/multipart"
)

var (
	accessKeyId     string
	accessKeySecret string
)

type AliOSS interface {
	UploadFile(file *multipart.FileHeader) (path, filename string, err error) // Upload File to Tencent COS
}

// TencentCOS config
type AliConfig struct {
	client          *oss.Client // 阿里云
	Bucket          string      `mapstructure:"bucket" json:"bucket" yaml:"bucket"`                                // 桶名称
	Region          string      `mapstructure:"region" json:"region" yaml:"region"`                                // 地区
	AccessKeyId     string      `mapstructure:"access-key-id" json:"accessKeyId" yaml:"access-key-id"`             // 密钥 id
	AccessKeySecret string      `mapstructure:"access-key-secret" json:"accessKeySecret" yaml:"access-key-secret"` // 密钥key
	BaseURL         string      `mapstructure:"base-url" json:"baseURL" yaml:"base-url"`                           // 地址
	PathPrefix      string      `mapstructure:"path-prefix" json:"pathPrefix" yaml:"path-prefix"`                  // 路径前缀
}

func (c AliConfig) UploadFile(file *multipart.FileHeader) (path, filename string, err error) {
	panic("implement me")
}

// @author: [wulala](https://github.com/water-gulugulu)
// @author: [wulala](https://gitee.com/diunigedaxigua)
// @function: NewTencentOSS
// @description: 实现COS接口
// @param: c TencentCOS 初始化COS接口参数
// @return: TencentOSS
func NewAliOSS(c *AliConfig) AliOSS {
	c.BaseURL = "nas.cn-" + c.Region + ".aliyuncs.com"

	client, err := c.NewClient()
	if err != nil {
		return nil
	}
	return &AliConfig{
		Bucket:          c.Bucket,
		Region:          c.Region,
		AccessKeyId:     c.AccessKeyId,
		AccessKeySecret: c.AccessKeySecret,
		BaseURL:         c.BaseURL,
		PathPrefix:      c.PathPrefix,
		client:          client,
	}
} /**
 * 使用AK&SK初始化账号Client
 * @param accessKeyId
 * @param accessKeySecret
 * @return Client
 * @throws Exception
 */
func (c *AliConfig) NewClient() (ossClient *oss.Client, e error) {
	// 创建OSSClient实例。
	// yourEndpoint填写Bucket对应的Endpoint，以华东1（杭州）为例，填写为https://oss-cn-hangzhou.aliyuncs.com。其它Region请按实际情况填写。
	// 阿里云账号AccessKey拥有所有API的访问权限，风险很高。强烈建议您创建并使用RAM用户进行API访问或日常运维，请登录RAM控制台创建RAM用户。
	client, err := oss.New(c.BaseURL, c.AccessKeyId, c.AccessKeySecret)
	if err != nil {
		fmt.Println("Error:", err)
		return nil, err
	}

	// // 填写存储空间名称，例如bucket。
	// bucket, err := client.Bucket(c.Bucket)
	// if err != nil {
	// 	fmt.Println("Error:", err)
	// 	os.Exit(-1)
	// }
	//
	// // 依次填写Object的完整路径（例如exampledir/exampleobject.txt）和本地文件的完整路径（例如D:\\localpath\\examplefile.txt）。
	// err = bucket.PutObjectFromFile("exampledir/exampleobject.txt", "D:\\localpath\\examplefile.txt")
	// if err != nil {
	// 	fmt.Println("Error:", err)
	// 	os.Exit(-1)
	// }
	return client, nil
}
